package com.tarena.lbs.common.utils;

import com.github.pagehelper.PageInfo;
import com.tarena.lbs.base.protocol.pager.PageResult;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Mikazuki on 2025/6/9.
 * 封装分页转换
 */
public class PageConverter {
    /**
     * 将分页信息和对象列表转换为PageResult对象
     * 此方法用于将给定的分页信息(source)和一个新对象列表(objects)合并到一个PageResult对象中
     * 它通常用于在不同数据模型之间进行转换，同时保持分页信息不变
     *
     * @param <T> 分页信息中包含的对象类型
     * @param <R> 要转换后列表中的对象类型
     * @param source 分页信息，包含当前页码、页面大小和总记录数
     * @param objects 要转换后的对象列表
     * @return 返回一个填充了分页信息和新对象列表的PageResult对象
     */
    public static <T, R> PageResult<R> convert(PageInfo<T> source, List<R> objects) {
        // 创建一个新的PageResult对象
        PageResult<R> result = new PageResult<>();
        // 设置页码，从source中获取
        result.setPageNo(source.getPageNum());
        // 设置页面大小，从source中获取
        result.setPageSize(source.getPageSize());
        // 设置总记录数，从source中获取
        result.setTotal(source.getTotal());
        // 设置转换后的对象列表
        result.setObjects(objects);
        // 返回填充好的PageResult对象
        return result;
    }
}
